package com.foreknow.demo03;

import javax.sound.midi.SysexMessage;
import java.util.Scanner;

/**
 * 模拟简单的ATM机存取款程序
 * 功能：1.登录页面(输出)   2.登录    3.菜单：3.1 查询  3.2 存款   3.3 取款  3.4  修改密码  3.5 退出系统
 */
public class BankSystem {
  /**
   * 1.登录页面(输出)
   */
  public static void welcome() {
    System.out.println("-------------欢迎登录银行系统-------------");
    System.out.println("-----------------------Version1.0------");

  }

  /**
   * 2.登录
   * @param user 用户名
   * @param pwd  密码
   * @return boolean
   */
  public static boolean login(String user,String pwd) {
      Scanner input = new Scanner(System.in);
      for(int i = 3;i>0;i--) {
        System.out.println("请输入账号");
        String new_user = input.next();
        System.out.println("请输入密码");
       String new_pwd = input.next();
        if(user.equals(new_user)&&pwd.equals(new_pwd)) {
          //登录成功
          System.out.println("登录成功......");
          return true;
        }else {
          if(i-1==0){
            System.out.println("您输入的密码3次错误......");
            //退出系统
            System.exit(0);
          }
          System.out.println("账户名或密码错误,请重新输入今日还有"+(i-1)+"次机会");

        }

      }
    return false;
  }


  /**
   * 判断是否继续操作(y/n)
   */
  public static void decide(){
    Scanner input  = new Scanner(System.in);
    System.out.println("是否继续操作(y/n)");
    String dec = input.next();
    if(dec.equals("y")) {
      return;
    }else if(dec.equals("n")) {
      System.out.println("退出成功......");
      System.exit(0);
    }else {
      while (true){
        System.out.println("输入错误，请重新重新输入是否继续(y/n)");
        String temp = input.next();
        if(temp.equals("y")){
          return;
        }else if(temp.equals("n")) {
          System.out.println("退出成功......");
          System.exit(0);
        }
      }
    }
  }

  /**
   * 查询余额
   * @param money
   */
  public static void checkMoney(double money) {
    System.out.println("您的余额为"+money);
  }

  /**
   * 存款
   * @param money 余额
   * @return double
   */
  public static  double setMoney(double money) {
    System.out.println("请输入您要存款的金额");
    Scanner input = new Scanner(System.in);
    double addMoney = input.nextInt();
    if(addMoney>10000) {
      System.out.println("单次取款的金额超过1万元");
      return 0;
    }else if(addMoney<0) {
      System.out.println("存款的金额错误");
      return 0;
    }else if(addMoney%100!=0) {
      System.out.println("请输入100的整数倍存款");
      return 0;
    }else {
      System.out.println("存款成功，当前的余额为"+(money+addMoney));
      return addMoney;
    }
  }

  /**
   * 取款
   * @param money
   * @return
   */
  public static double getMoney(double money){
    System.out.println("请输入取款的金额");
    Scanner input = new Scanner(System.in);
    double subMoney = input.nextInt();
    if(subMoney>money){
      System.out.println("余额不足");
      return 0;
    }else if(subMoney>3000) {
      System.out.println("单次取款金额超过3000");
      return 0;
    }else if(subMoney<0) {
      System.out.println("取款金额错误");
      return 0;
    }else if(subMoney%100!=0) {
      System.out.println("请取出100的整数倍存款");
      return 0;
    }else {
      System.out.println("取款成功，当前的余额为"+(money-subMoney));
      return subMoney;
    }

  }

  /**
   * 修改密码
   * @param pwd
   * @return 修改成功返回新的密码，失败就返回旧的密码
   */
  public static String changePwd(String pwd) {
    System.out.println("请输入旧密码");
    Scanner input = new Scanner(System.in);
    String old_pwd = input.next();
    if(old_pwd.equals(pwd)) {
      System.out.println("请输入新密码");
      String new_pwd = input.next();
      System.out.println("请再次输入新密码");
      String new_pwd1 = input.next();
      if(new_pwd.equals(new_pwd1)) {
        System.out.println("修改密码成功......");
        return new_pwd;
      }else {
        System.out.println("两次输入的密码不一致，请重新输入");
        return pwd;
      }

    }else {
      System.out.println("旧密码输入错误");
    }
    return pwd;
  }
  public static void main(String[] args) {
    //初始化一个账户信息，因为没有数据库
    String user = "admin";
    String pwd = "123";
    double money = 10000;//余额
    Scanner input = new Scanner(System.in);
    //登录的界面
    welcome();
    //用户一定要先登录才能对系统进行操作
    //调用登录的方法login
    boolean b = login(user,pwd);
    while(b==true) {
      //如果登录成功，就可以进入到操作界面
      while(true) {
        System.out.println("1 查询  2 存款   3 取款  4  修改密码  5 退出系统");
        int opt = input.nextInt();
        switch(opt){
          case 1:
            //查询余额
            checkMoney(money);
            //询问用户是否继续
            decide();
            break;
          case 2:
            //存款
            money+=setMoney(money);
            decide();
            break;
          case 3:
            //取款
            money-=getMoney(money);
            decide();
            break;
          case 4:
            //修改密码，因为现在没有数据库，所以直接打印当前的密码来查看是否成功
            String str = changePwd(pwd);
            System.out.println("当前的密码为"+str);
            decide();
            break;
          case 5:
            //退出系统
            System.out.println("退出成功");
            System.exit(0);
            break;
          default:
            System.out.println("非法操作");
            break;
        }
      }
    }



  }
}
